package com.xiaoke.java2;

/**
 * 说明早期绑定和晚期绑定的例子
 *
 * @author xiaoke
 * @Date 2022/1/12 15:28
 */

class Animal{

    public void  eat(){
        System.out.println("动物进食");
    }

}
//接口 ： 捕猎
interface Huntable{
    void hunt();
}

class Dog extends Animal implements Huntable{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }

    @Override
    public void hunt() {
        System.out.println("捕食耗子，多管闲事");
    }
}

class Cat extends Animal implements Huntable{

    public Cat() {
        super();  //编译器确定 早期绑定
    }
    public Cat(String name) {
        this();
    }

    @Override
    public void eat() {
        super.eat(); //早期绑定
        System.out.println("猫吃鱼");
    }

    @Override
    public void hunt() {
        System.out.println("捕食耗子，天经地义");
    }
}


public class AnimalTest {
    public void showAnimal(Animal animal){
        animal.eat(); //表现为晚期绑定
    }
    public void showHunt(Huntable h){
        h.hunt();   //表现为晚期绑定
    }

}
